package com.lx.algorithm.temp;

/**
 * Description:
 * Copyright:   Copyright (c)2019
 * Company:     zefu
 *
 * @author: 张李鑫
 * @version: 1.0
 * Create at:   2021-10-26 09:47:32
 * <p>
 * Modification History:
 * Date         Author      Version     Description
 * ------------------------------------------------------------------
 * 2021-10-26     张李鑫                     1.0         1.0 Version
 */
public class RobotMove {

    /**
     * 假设有排成一行的N个位置，记为1~N，N 一定大于或等于 2
     * 开始时机器人在其中的M位置上(M 一定是 1~N 中的一个)
     * 如果机器人来到1位置，那么下一步只能往右来到2位置；
     * 如果机器人来到N位置，那么下一步只能往左来到 N-1 位置；
     * 如果机器人来到中间位置，那么下一步可以往左走或者往右走；
     * 规定机器人必须走 K 步，最终能来到P位置(P也是1~N中的一个)的方法有多少种
     * 给定四个参数 N、M、K、P，返回方法数。
     */

    public static void main(String[] args) {
        System.out.println(process(5, 6, 2, 4));


    }

    /**
     * @param N 总共有的位置数量
     * @param K 一共需要走的步数
     * @param M 开始位置
     * @param P 最终到达的位置
     * @return
     */
    public static int process(int N, int K, int M, int P) {
        if (K == 0) {
            return M == P ? 1 : 0;
        }
        if (M == 1) {
            return process(N, K - 1, 2, P);
        }
        if (M == N) {
            return process(N, K - 1, N - 1, P);
        }
        return process(N, K - 1, M + 1, P) + process(N, K - 1, M - 1, P);
    }

//
//    public static int programming(int N, int K, int M, int P) {
//
//    }


}
